<!DOCTYPE html>
<html>
  <head>
  <meta http-equiv="content-type" content="text/html; charset=utf-8">
  <meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" name="viewport">
  <meta name="description" content="刘清政">
  <meta name="keyword" content="hexo-theme">
  
    <link rel="shortcut icon" href="/css/images/logo.png">
  
  <title>
    
      01-Go语言介绍 | Justin-刘清政的博客
    
  </title>
  <link href="//cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet">
  <link href="//cdnjs.cloudflare.com/ajax/libs/nprogress/0.2.0/nprogress.min.css" rel="stylesheet">
  <link href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/tomorrow.min.css" rel="stylesheet">
  
<link rel="stylesheet" href="/css/style.css">

  
    
<link rel="stylesheet" href="/css/plugins/gitment.css">

  
  <script src="//cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
  <script src="//cdnjs.cloudflare.com/ajax/libs/geopattern/1.2.3/js/geopattern.min.js"></script>
  <script src="//cdnjs.cloudflare.com/ajax/libs/nprogress/0.2.0/nprogress.min.js"></script>
  
    
<script src="/js/qrious.js"></script>

  
  
    
<script src="/js/gitment.js"></script>

  
  

  
<meta name="generator" content="Hexo 4.2.0"></head>
<div class="wechat-share">
  <img src="/css/images/logo.png" />
</div>

  <body>
    <header class="header fixed-header">
  <div class="header-container">
    <a class="home-link" href="/">
      <div class="logo"></div>
      <span>Justin-刘清政的博客</span>
    </a>
    <ul class="right-list">
      
        <li class="list-item">
          
            <a href="/" class="item-link">主页</a>
          
        </li>
      
        <li class="list-item">
          
            <a href="/tags/" class="item-link">标签</a>
          
        </li>
      
        <li class="list-item">
          
            <a href="/archives/" class="item-link">归档</a>
          
        </li>
      
        <li class="list-item">
          
            <a href="/about/" class="item-link">关于我</a>
          
        </li>
      
    </ul>
    <div class="menu">
      <span class="icon-bar"></span>
      <span class="icon-bar"></span>
      <span class="icon-bar"></span>
    </div>
    <div class="menu-mask">
      <ul class="menu-list">
        
          <li class="menu-item">
            
              <a href="/" class="menu-link">主页</a>
            
          </li>
        
          <li class="menu-item">
            
              <a href="/tags/" class="menu-link">标签</a>
            
          </li>
        
          <li class="menu-item">
            
              <a href="/archives/" class="menu-link">归档</a>
            
          </li>
        
          <li class="menu-item">
            
              <a href="/about/" class="menu-link">关于我</a>
            
          </li>
        
      </ul>
    </div>
  </div>
</header>

    <div id="article-banner">
  <h2>01-Go语言介绍</h2>



  <p class="post-date">2019-03-10</p>
    <!-- 不蒜子统计 -->
    <span id="busuanzi_container_page_pv" style='display:none' class="">
        <i class="icon-smile icon"></i> 阅读数：<span id="busuanzi_value_page_pv"></span>次
    </span>
  <div class="arrow-down">
    <a href="javascript:;"></a>
  </div>
</div>
<main class="app-body flex-box">
  <!-- Article START -->
  <article class="post-article">
    <section class="markdown-content"><h2 id="一-Go语言介绍"><a href="#一-Go语言介绍" class="headerlink" title="一 Go语言介绍"></a>一 Go语言介绍</h2><p>Go 即Golang，是Google公司2009年11月正式对外公开的一门编程语言。</p>
<p>Go是静态强类型语言，是区别于解析型语言的编译型语言(静态：类型固定 强类型：不同类型不允许直接运算)。</p>
<p>解析型语言——源代码是先翻译为中间代码，然后由解析器对代码进行解释执行。</p>
<p>编译型语言——源代码编译生成机器语言，然后由机器直接执行机器码即可执行。</p>
<h2 id="二-Go语言特性"><a href="#二-Go语言特性" class="headerlink" title="二 Go语言特性"></a>二 Go语言特性</h2><p>跨平台的编译型语言</p>
<p>语法接近C语言</p>
<p>管道（channel），切片（slice），并发（routine）</p>
<p>有垃圾回收的机制</p>
<p>支持面向对象和面向过程的编程模式</p>
<h2 id="三-Go语言发展（版本-特性）"><a href="#三-Go语言发展（版本-特性）" class="headerlink" title="三 Go语言发展（版本/特性）"></a>三 Go语言发展（版本/特性）</h2><p>2009年11月7日 weekly.2009-11-06 —— 早期的版本</p>
<p>2012年3月28日 go1 —— 稳定版版的发布</p>
<p>2013年5月14日 go1.1 —— 语言本身的变化、库的变化等。</p>
<p>2013年12月01日 go1.2 —— 提供更好的调度和一个新的语言特性。</p>
<p>2014年6月18日 go1.3 —— 主要是在实现的工作上的变化，以及精准的垃圾回收。</p>
<p>2014年12月10日 go1.4 —— 包含了2个很小的语言变更。</p>
<p>2015年8月19日 go1.5 —— 实现的架构变化，同时保留了和旧版本的兼容性,本次更新中移除了”最后残余的C代码”。</p>
<p>2016年2月7日 go1.6 —— 语言本身、运行时、和库的实现的变化。</p>
<p>2016年8月15日 go1.7 ——  标准库有显着的性能改进和变化。</p>
<p>2017年2月26日 go1.8 —— 标准库有显着的性能改进和变化。</p>
<p>2017年8月24日 go1.9 —— 是包含语言，标准库，以及运行时的诸多变化。这个版本中的大部分工作都是对运行时和工具的改进。</p>
<p>2018年2月16日 go1.10 —— 大部分更改都在工具链，运行时和库的实现中。</p>
<p>2018年8月24日 go1.11 —— modules和WebAssembly支持。</p>
<p>2019 年 2 月  go 1.12 —— modules和WebAssembly支持。</p>
<p>2019 年 2 月   go 1.12— — 基于 analysi包重写了 go vet`命令，为开发者写自己的检查器提供了更大的灵活性</p>
<p>2019 年 9 月   go 1.13— — 改进了 <code>sync</code> 包中的 <code>Pool</code>，在 gc 运行时不会清除 pool。它引进了一个缓存来清理两次 gc 运行时都没有被引用的 pool 中的实例。重写了逃逸分析，减少了 Go 程序中堆上的内存申请的空间</p>
<p>2020 年 2 月   go 1.14— — 现在 Go Module 已经可以用于生产环境，鼓励所有用户迁移到 Module。该版本支持嵌入具有重叠方法集的接口。性能方面做了较大的改进，包括：进一步提升 defer 性能、页分配器更高效，同时 timer 也更高效。现在，Goroutine 支持异步抢占</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 语法变化</span></span><br><span class="line">– 增加一种非常小概率使用的<span class="keyword">for</span> range语法</span><br><span class="line"><span class="keyword">for</span> range x &#123; … &#125; 等价于 <span class="keyword">for</span> _ = range x &#123;…&#125;</span><br><span class="line">– 不再自动对 **T 进行解引用(dereference)</span><br><span class="line">对 var x **T，以前可直接用 x.Fn() 调用 T 的方法</span><br><span class="line">– 现在需要明确写 (*x).Fn()</span><br><span class="line">– 引入 internal package 概念在 Go1<span class="number">.4</span> 只对主路径($GOROOT)有效，未来会全面应用到$GOPATH</span><br><span class="line">– 引入 canonical <span class="keyword">import</span> paths (权威导入路径) 概念</span><br><span class="line">	package pdf // <span class="keyword">import</span> <span class="string">"rsc.io/pdf"</span></span><br><span class="line"><span class="comment">#2 实现细节</span></span><br><span class="line">– 开始支持 Android (编译出binary或.so)</span><br><span class="line">– 运行时(runtime)</span><br><span class="line">-大部分用Go重写(以前是C)，好处：更加精确的GC</span><br><span class="line">-放弃了分段栈(segmented stack)</span><br></pre></td></tr></table></figure>

<p>预计2020 年 8 月   go 1.15</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 1 语法变化</span></span><br><span class="line">– map 字面量简化写法</span><br><span class="line">var x = map[Point]int&#123;&#123;<span class="number">1.0</span>, <span class="number">2.1</span>&#125;: <span class="number">1</span>,&#123;<span class="number">2.3</span>, <span class="number">4.5</span>&#125;: <span class="number">2</span>,&#125;</span><br><span class="line"><span class="comment"># 2 实现细节</span></span><br><span class="line">– 自举：不再有C，所有代码(包括编译器、链接器和运行时)都用Go和少量汇编实现</span><br><span class="line">– GC：重写GC，进一步降低GC的latency</span><br><span class="line">– GOMAXPROCS 默认是 CPU 数(以前是<span class="number">1</span>)</span><br><span class="line">– 开始支持 iOS：Go team 还提交了第一个 Go 写的 AppStore 应用 Ivy</span><br></pre></td></tr></table></figure>





<h2 id="四-Go语言应用"><a href="#四-Go语言应用" class="headerlink" title="四 Go语言应用"></a>四 Go语言应用</h2><h3 id="谁在用"><a href="#谁在用" class="headerlink" title="谁在用"></a>谁在用</h3><h4 id="Google"><a href="#Google" class="headerlink" title="Google"></a>Google</h4><p>这个不用多做介绍，作为开发Go语言的公司，当仁不让。Google基于Go有很多优秀的项目，比如：<a href="https://github.com/kubernetes/kubernetes" target="_blank" rel="noopener">https://github.com/kubernetes/kubernetes</a> ，大家也可以在Github上 <a href="https://github.com/google/" target="_blank" rel="noopener">https://github.com/google/</a> 查看更多Google的Go开源项目。</p>
<h4 id="Facebook"><a href="#Facebook" class="headerlink" title="Facebook"></a>Facebook</h4><p>Facebook也在用，为此他们还专门在Github上建立了一个开源组织facebookgo，大家可以通过<a href="https://github.com/facebookgo" target="_blank" rel="noopener">https://github.com/facebookgo</a>访问查看facebook开源的项目，比如著名的是平滑升级的grace。</p>
<h4 id="腾讯"><a href="#腾讯" class="headerlink" title="腾讯"></a>腾讯</h4><p>腾讯作为国内的大公司，还是敢于尝试的，尤其是Docker容器化这一块，他们在15年已经做了docker万台规模的实践，具体可以参考<a href="http://www.infoq.com/cn/articles/tencent-millions-scale-docker-application-practice" target="_blank" rel="noopener">http://www.infoq.com/cn/articles/tencent-millions-scale-docker-application-practice</a> 。</p>
<p>主要职责是：</p>
<p>负责腾讯游戏蓝鲸平台后台开发工作<br>负责容器相关的开发工作</p>
<p>和蓝鲸平台，容器开发有关。腾讯作为主要使用C/C++的公司，使用Go会方便很多，也有很多优势，不过日积月累的C/C++代码很难改造，也不敢动，所以新业务会在Go方面尝试。</p>
<h4 id="百度"><a href="#百度" class="headerlink" title="百度"></a>百度</h4><p>目前所知的百度的使用是在运维这边，是百度运维的一个BFE项目，负责前端流量的接入。他们的负责人在2016年有分享，大家可以看下这个 <a href="http://www.infoq.com/cn/presentations/application-of-golang-in-baidu-frontend" target="_blank" rel="noopener">http://www.infoq.com/cn/presentations/application-of-golang-in-baidu-frontend</a> .</p>
<p>其次就是百度的消息系统，从其最近的Golang招聘介绍就可以看出来.</p>
<p>负责公司手百消息通讯系统服务器端开发及维护</p>
<h4 id="京东"><a href="#京东" class="headerlink" title="京东"></a>京东</h4><p>京东云消息推送系统、云存储，以及京东商城等都有使用Go做开发。</p>
<h4 id="小米"><a href="#小米" class="headerlink" title="小米"></a>小米</h4><p>小米对Golang的支持，莫过于运维监控系统的开源，也就是 <a href="http://open-falcon.com/" target="_blank" rel="noopener">http://open-falcon.com/</a> 。</p>
<p>此外，小米互娱、小米商城、小米视频、小米生态链等团队都在使用Golang。</p>
<h4 id="360"><a href="#360" class="headerlink" title="360"></a>360</h4><p>360对Golang的使用也不少，一个是开源的日志搜索系统Poseidon，托管在Github上，<a href="https://github.com/Qihoo360/poseidon" target="_blank" rel="noopener">https://github.com/Qihoo360/poseidon</a>.</p>
<p>还有360的推送团队也在使用，他们还写了篇博文在Golang的官方博客上 <a href="https://blog.golang.org/qihoo" target="_blank" rel="noopener">https://blog.golang.org/qihoo</a>。</p>
<p>360直播在招聘Golang开发工程师。</p>
<p>美团、滴滴、新浪以及七牛等。一般的选择，都是选择用于自己公司合适的产品系统来做，比如消息推送的、监控的、容器的等，Golang特别适合做网络并发的服务，这是他的强项，所以也是被优先用于这些项目。</p>
<h3 id="应用领域"><a href="#应用领域" class="headerlink" title="应用领域"></a>应用领域</h3><p>服务开发、并发、分布式、微服务等方向</p>
<h2 id="五-Go语言项目"><a href="#五-Go语言项目" class="headerlink" title="五 Go语言项目"></a>五 Go语言项目</h2><p>docker:基于lxc的一个虚拟打包工具，能够实现PAAS平台的组建。</p>
<p>kubernetes ：Kubernetes是Google开源的一个容器编排引擎，它支持自动化部署、大规模可伸缩、应用容器化管理。在生产环境中部署一个应用程序时，通常要部署该应用的多个实例以便对应用请求进行负载均衡</p>
<p>区块链：BTCD 是用go语言实现的完整节点的比特币实现</p>
<p>nsq：bitly开源的消息队列系统，性能非常高，目前他们每天处理数十亿条的消息</p>
<p>packer:用来生成不同平台的镜像文件，例如VM、vbox、AWS等，作者是vagrant的作者</p>
<p>skynet：分布式调度框架</p>
<p>Doozer：分布式同步工具，类似ZooKeeper</p>
<p>Heka：mazila开源的日志处理系统</p>
<p>cbfs：couchbase开源的分布式文件系统</p>
<p>tsuru：开源的PAAS平台，和SAE实现的功能一模一样</p>
<p>groupcache：memcahe作者写的用于Google下载系统的缓存系统</p>
<p>god：类似redis的缓存系统，但是支持分布式和扩展性</p>
<p>gor：网络流量抓包和重放工具</p>
<h2 id="六-Go语架构"><a href="#六-Go语架构" class="headerlink" title="六 Go语架构"></a>六 Go语架构</h2><p>GOPATH的工作区包含bin，src，和pkg这三个：</p>
<p>src——源码（包含第三方的和自己项目的）</p>
<p>bin——编译生成的可执行程序</p>
<p>pkg——编译时生成的对象文件</p>
<h2 id="七-go适合做什么"><a href="#七-go适合做什么" class="headerlink" title="七 go适合做什么"></a>七 go适合做什么</h2><ul>
<li>服务端开发</li>
<li>分布式系统，微服务</li>
<li>网络编程</li>
<li>区块链开发</li>
<li>内存KV数据库，例如boltDB、levelDB</li>
<li>云平台</li>
</ul>
<h2 id="八-Go语言发展前景"><a href="#八-Go语言发展前景" class="headerlink" title="八 Go语言发展前景"></a>八 Go语言发展前景</h2><p>Go语言将登上语言榜前列，与C和Java并列前三甲</p>
<p>Go语言称霸云计算</p>
<p>Go将统治下一个10年</p>
<p>目前Go语言已经⼴泛应用于人工智能、云计算开发、容器虚拟化、⼤数据开发、数据分析及科学计算、运维开发、爬虫开发、游戏开发等领域。</p>
<p>Go语言简单易学，天生支持并发，完美契合当下高并发的互联网生态</p>
</section>
    <!-- Tags START -->
    
      <div class="tags">
        <span>Tags:</span>
        
  <a href="/tags#Go" >
    <span class="tag-code">Go</span>
  </a>

      </div>
    
    <!-- Tags END -->
    <!-- NAV START -->
    
  <div class="nav-container">
    <!-- reverse left and right to put prev and next in a more logic postition -->
    
      <a class="nav-left" href="/go/7-%E5%85%B6%E4%BB%96/05-Go%E8%AF%AD%E8%A8%80%E4%B9%8Bunsafe%E5%8C%85/">
        <span class="nav-arrow">← </span>
        
          Go语言之unsafe包
        
      </a>
    
    
      <a class="nav-right" href="/go/2-Go%E8%AF%AD%E8%A8%80%E5%9F%BA%E7%A1%80/17-%E6%96%B9%E6%B3%95/">
        
          17-方法
        
        <span class="nav-arrow"> →</span>
      </a>
    
  </div>

    <!-- NAV END -->
    <!-- 打赏 START -->
    
      <div class="money-like">
        <div class="reward-btn">
          赏
          <span class="money-code">
            <span class="alipay-code">
              <div class="code-image"></div>
              <b>使用支付宝打赏</b>
            </span>
            <span class="wechat-code">
              <div class="code-image"></div>
              <b>使用微信打赏</b>
            </span>
          </span>
        </div>
        <p class="notice">点击上方按钮,请我喝杯咖啡！</p>
      </div>
    
    <!-- 打赏 END -->
    <!-- 二维码 START -->
    
      <div class="qrcode">
        <canvas id="share-qrcode"></canvas>
        <p class="notice">扫描二维码，分享此文章</p>
      </div>
    
    <!-- 二维码 END -->
    
      <!-- Gitment START -->
      <div id="comments"></div>
      <!-- Gitment END -->
    
  </article>
  <!-- Article END -->
  <!-- Catalog START -->
  
    <aside class="catalog-container">
  <div class="toc-main">
  <!-- 不蒜子统计 -->
    <strong class="toc-title">目录</strong>
    
      <ol class="toc-nav"><li class="toc-nav-item toc-nav-level-2"><a class="toc-nav-link" href="#一-Go语言介绍"><span class="toc-nav-text">一 Go语言介绍</span></a></li><li class="toc-nav-item toc-nav-level-2"><a class="toc-nav-link" href="#二-Go语言特性"><span class="toc-nav-text">二 Go语言特性</span></a></li><li class="toc-nav-item toc-nav-level-2"><a class="toc-nav-link" href="#三-Go语言发展（版本-特性）"><span class="toc-nav-text">三 Go语言发展（版本&#x2F;特性）</span></a></li><li class="toc-nav-item toc-nav-level-2"><a class="toc-nav-link" href="#四-Go语言应用"><span class="toc-nav-text">四 Go语言应用</span></a><ol class="toc-nav-child"><li class="toc-nav-item toc-nav-level-3"><a class="toc-nav-link" href="#谁在用"><span class="toc-nav-text">谁在用</span></a><ol class="toc-nav-child"><li class="toc-nav-item toc-nav-level-4"><a class="toc-nav-link" href="#Google"><span class="toc-nav-text">Google</span></a></li><li class="toc-nav-item toc-nav-level-4"><a class="toc-nav-link" href="#Facebook"><span class="toc-nav-text">Facebook</span></a></li><li class="toc-nav-item toc-nav-level-4"><a class="toc-nav-link" href="#腾讯"><span class="toc-nav-text">腾讯</span></a></li><li class="toc-nav-item toc-nav-level-4"><a class="toc-nav-link" href="#百度"><span class="toc-nav-text">百度</span></a></li><li class="toc-nav-item toc-nav-level-4"><a class="toc-nav-link" href="#京东"><span class="toc-nav-text">京东</span></a></li><li class="toc-nav-item toc-nav-level-4"><a class="toc-nav-link" href="#小米"><span class="toc-nav-text">小米</span></a></li><li class="toc-nav-item toc-nav-level-4"><a class="toc-nav-link" href="#360"><span class="toc-nav-text">360</span></a></li></ol></li><li class="toc-nav-item toc-nav-level-3"><a class="toc-nav-link" href="#应用领域"><span class="toc-nav-text">应用领域</span></a></li></ol></li><li class="toc-nav-item toc-nav-level-2"><a class="toc-nav-link" href="#五-Go语言项目"><span class="toc-nav-text">五 Go语言项目</span></a></li><li class="toc-nav-item toc-nav-level-2"><a class="toc-nav-link" href="#六-Go语架构"><span class="toc-nav-text">六 Go语架构</span></a></li><li class="toc-nav-item toc-nav-level-2"><a class="toc-nav-link" href="#七-go适合做什么"><span class="toc-nav-text">七 go适合做什么</span></a></li><li class="toc-nav-item toc-nav-level-2"><a class="toc-nav-link" href="#八-Go语言发展前景"><span class="toc-nav-text">八 Go语言发展前景</span></a></li></ol>
    
  </div>
</aside>
  
  <!-- Catalog END -->
</main>

<script>
  (function () {
    var url = 'http://www.liuqingzheng.top/go/1-环境搭建/01-Go语言介绍/';
    var banner = ''
    if (banner !== '' && banner !== 'undefined' && banner !== 'null') {
      $('#article-banner').css({
        'background-image': 'url(' + banner + ')'
      })
    } else {
      $('#article-banner').geopattern(url)
    }
    $('.header').removeClass('fixed-header')

    // error image
    $(".markdown-content img").on('error', function() {
      $(this).attr('src', 'http://file.muyutech.com/error-img.png')
      $(this).css({
        'cursor': 'default'
      })
    })

    // zoom image
    $(".markdown-content img").on('click', function() {
      var src = $(this).attr('src')
      if (src !== 'http://file.muyutech.com/error-img.png') {
        var imageW = $(this).width()
        var imageH = $(this).height()

        var zoom = ($(window).width() * 0.95 / imageW).toFixed(2)
        zoom = zoom < 1 ? 1 : zoom
        zoom = zoom > 2 ? 2 : zoom
        var transY = (($(window).height() - imageH) / 2).toFixed(2)

        $('body').append('<div class="image-view-wrap"><div class="image-view-inner"><img src="'+ src +'" /></div></div>')
        $('.image-view-wrap').addClass('wrap-active')
        $('.image-view-wrap img').css({
          'width': `${imageW}`,
          'transform': `translate3d(0, ${transY}px, 0) scale3d(${zoom}, ${zoom}, 1)`
        })
        $('html').css('overflow', 'hidden')

        $('.image-view-wrap').on('click', function() {
          $(this).remove()
          $('html').attr('style', '')
        })
      }
    })
  })();
</script>


  <script>
    var qr = new QRious({
      element: document.getElementById('share-qrcode'),
      value: document.location.href
    });
  </script>



  <script>
    var gitmentConfig = "liuqingzheng";
    if (gitmentConfig !== 'undefined') {
      var gitment = new Gitment({
        id: "01-Go语言介绍",
        owner: "liuqingzheng",
        repo: "FuckBlog",
        oauth: {
          client_id: "32a4076431cf39d0ecea",
          client_secret: "94484bd79b3346a949acb2fda3c8a76ce16990c6"
        },
        theme: {
          render(state, instance) {
            const container = document.createElement('div')
            container.lang = "en-US"
            container.className = 'gitment-container gitment-root-container'
            container.appendChild(instance.renderHeader(state, instance))
            container.appendChild(instance.renderEditor(state, instance))
            container.appendChild(instance.renderComments(state, instance))
            container.appendChild(instance.renderFooter(state, instance))
            return container;
          }
        }
      })
      gitment.render(document.getElementById('comments'))
    }
  </script>




    <div class="scroll-top">
  <span class="arrow-icon"></span>
</div>
    <footer class="app-footer">
<!-- 不蒜子统计 -->
<span id="busuanzi_container_site_pv">
     本站总访问量<span id="busuanzi_value_site_pv"></span>次
</span>
<span class="post-meta-divider">|</span>
<span id="busuanzi_container_site_uv" style='display:none'>
     本站访客数<span id="busuanzi_value_site_uv"></span>人
</span>
<script async src="//busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js"></script>



  <p class="copyright">
    &copy; 2021 | Proudly powered by <a href="https://www.cnblogs.com/xiaoyuanqujing" target="_blank">小猿取经</a>
    <br>
    Theme by <a href="https://www.cnblogs.com/xiaoyuanqujing" target="_blank" rel="noopener">小猿取经</a>
  </p>
</footer>

<script>
  function async(u, c) {
    var d = document, t = 'script',
      o = d.createElement(t),
      s = d.getElementsByTagName(t)[0];
    o.src = u;
    if (c) { o.addEventListener('load', function (e) { c(null, e); }, false); }
    s.parentNode.insertBefore(o, s);
  }
</script>
<script>
  async("//cdnjs.cloudflare.com/ajax/libs/fastclick/1.0.6/fastclick.min.js", function(){
    FastClick.attach(document.body);
  })
</script>

<script>
  var hasLine = 'true';
  async("//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/highlight.min.js", function(){
    $('figure pre').each(function(i, block) {
      var figure = $(this).parents('figure');
      if (hasLine === 'false') {
        figure.find('.gutter').hide();
      }
      var lang = figure.attr('class').split(' ')[1] || 'code';
      var codeHtml = $(this).html();
      var codeTag = document.createElement('code');
      codeTag.className = lang;
      codeTag.innerHTML = codeHtml;
      $(this).attr('class', '').empty().html(codeTag);
      figure.attr('data-lang', lang.toUpperCase());
      hljs.highlightBlock(block);
    });
  })
</script>





<!-- Baidu Tongji -->

<script>
    var _baId = 'c5fd96eee1193585be191f318c3fa725';
    // Originial
    var _hmt = _hmt || [];
    (function() {
      var hm = document.createElement("script");
      hm.src = "//hm.baidu.com/hm.js?" + _baId;
      var s = document.getElementsByTagName("script")[0];
      s.parentNode.insertBefore(hm, s);
    })();
</script>


<script src="/js/script.js"></script>


<script src="/js/search.js"></script>


<script src="/js/load.js"></script>



  <span class="local-search local-search-google local-search-plugin" style="right: 50px;top: 70px;;position:absolute;z-index:2;">
      <input type="search" placeholder="站内搜索" id="local-search-input" class="local-search-input-cls" style="">
      <div id="local-search-result" class="local-search-result-cls"></div>
  </span>


  </body>
</html>